home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 / Ham Radio 2000.iso / ham2000 / tcp_ip / os2 / pmnos11s / lpdbann.c < prev    next >
C/C++ Source or Header  |  1993-07-30  |  26KB  |  1,513 lines

  1. /* Internet LPD Server banner
  2.  *   written by David Johnson (dave@cs.olemiss.edu)
  3.  *
  4.  * This code is in the public domain.
  5.  *
  6.  * Revision History:
  7.  *
  8.  * Revision 1.0  91/09/04  dave
  9.  * Initial Release
  10.  *
  11.  */
  12. #include <stdio.h>
  13. #include <fcntl.h>
  14. #include <ctype.h>
  15. #include <time.h>
  16. #include <sys/stat.h>
  17. #ifdef    __TURBOC__
  18. #include <io.h>
  19. #include <dir.h>
  20. #endif
  21. #include "global.h"
  22. #include "mbuf.h"
  23. #include "proc.h"
  24. #include "iface.h"
  25. #include "socket.h"
  26. #include "dirutil.h"
  27. #include "commands.h"
  28. #include "files.h"
  29. #include "lp.h"
  30. #include "lpd.h"
  31. #include "lpdfilt.h"
  32.  
  33.  
  34. extern char lrgchars[][12];    /* defined below */
  35.  
  36. /* in lpdfilt.c */
  37. extern void output_char __ARGS((struct filter_stream *io_stream, int c));
  38. extern void output_string __ARGS((struct filter_stream *io_stream, char *s));
  39. extern void stream_flush __ARGS((struct filter_stream *io_stream));
  40.  
  41. /* local functions - exported to lpdunsp.c */
  42.        void print_banner __ARGS((struct LPDtrans *LPD, struct filter_stream *io_stream, char *username));
  43.  
  44. /* local functions - private */
  45. static void print_large __ARGS((char *string, int width, struct filter_stream *io_stream));
  46.  
  47. /*
  48.  * Print a banner for the current job
  49.  */
  50. void
  51. print_banner( LPD, io_stream, username )
  52. struct LPDtrans *LPD;
  53. struct filter_stream *io_stream;
  54. char *username;
  55. {
  56.     struct LPDfilter *fptr;
  57.     struct filter_stream output;
  58.     struct filter_parms *parms;
  59.     int s[2], sync;
  60.     char *time_string;
  61.     time_t current_time;
  62.     void (*process) __ARGS((int unused,void *parms,void *unused2));
  63.  
  64.     (void) time( ¤t_time );
  65.     time_string = ctime( ¤t_time );
  66.     rip( time_string );
  67.  
  68.     socketpair( AF_LOCAL, SOCK_STREAM, 0, s );
  69.     seteol( s[0], "\n" );
  70.     seteol( s[1], "\n" );
  71.  
  72.     output.type = IO_SOCKET;
  73.     output.stream.socket = s[0];
  74.  
  75.     /*
  76.      * locate filter info
  77.      */
  78.     process = NULLVFP;
  79.     fptr = filter_list;
  80.     while( fptr->name != NULL ) {
  81.         if( strcmp( fptr->name, LPD->pc->OF ) == 0 ) {
  82.             process = fptr->process;
  83.             break;
  84.         }
  85.         fptr++;
  86.     }
  87.     if( process == NULLVFP ) {
  88.         lpd_log( LPD, "print_banner: filter (%s) not found", LPD->pc->OF );
  89.         return;
  90.     }
  91.     YIELD;
  92.  
  93.     /*
  94.      * Set up parameters for output filter
  95.      */
  96.     parms = mallocw( sizeof( struct filter_parms ) );
  97.  
  98.     parms->printer_name = LPD->name;
  99.     parms->width = 0;
  100.     parms->length = 0;
  101.     parms->literal = 1;
  102.     parms->indent = 0;
  103.     parms->class = NULL;
  104.     parms->jobname = NULL;
  105.     parms->account = NULL;
  106.     parms->login_name = NULL;
  107.     parms->host = NULL;
  108.     parms->format = 'l';
  109.     parms->af_file = NULL;
  110.     parms->ps_start = NULL;
  111.     parms->ps_end = NULL;
  112.     parms->input.type = IO_SOCKET;
  113.     parms->input.stream.socket = s[1];
  114.     parms->pages = 0;
  115.     parms->output = *io_stream;
  116.     parms->sync = &sync;
  117.  
  118.     newproc("LPD filter",2048,process,0,(void *)parms,NULL,0);
  119.  
  120.     /*
  121.      * Print the banner
  122.      */
  123.     if( LPD->pc->SB ) {            /* short banner */
  124.         output_string( &output, username );
  125.         output_char( &output, '@' );
  126.         output_string( &output, LPD->job->hostname );
  127.         if( LPD->job->jobname ) {
  128.             output_string( &output, "  Job: " );
  129.             output_string( &output, LPD->job->jobname );
  130.         }
  131.         output_string( &output, "  Date: " );
  132.         output_string( &output, time_string );
  133.         output_char( &output, '\n' );
  134.     } else {                /* normal banner */
  135.         output_string( &output, "\n\n\n" );
  136.         print_large( username, LPD->job->width, &output );
  137.         output_string( &output, "\n\n" );
  138.         print_large( LPD->job->jobname, LPD->job->width, &output );
  139.  
  140.         output_string( &output, "\n\n\n\n\t\t\t\t\tUser:  " );
  141.         output_string( &output, username );
  142.         output_string( &output, "\n\t\t\t\t\tName:  " );
  143.         output_string( &output, LPD->job->person );
  144.         output_string( &output, "\n\t\t\t\t\tDate:  " );
  145.         output_string( &output, time_string );
  146.         if( LPD->job->jobname ) {
  147.             output_string( &output, "\n\t\t\t\t\tJob:   " );
  148.             output_string( &output, LPD->job->jobname );
  149.         }
  150.         output_string( &output, "\n\t\t\t\t\tClass: " );
  151.         output_string( &output, LPD->job->class );
  152.         output_char( &output, '\n' );
  153.     }
  154.     output_string( &output, LPD->pc->FF );
  155.     close_s( output.stream.socket );
  156.     YIELD;
  157.  
  158.     pwait( &sync );
  159.     free( parms );
  160. }
  161.  
  162. /*
  163.  * Print a line of LARGE characters for the specified string
  164.  */
  165. static void
  166. print_large( string, width, io_stream )
  167. char *string;
  168. int width;
  169. struct filter_stream *io_stream;
  170. {
  171.     int scanline, scancol, charcol, not_empty;
  172.     char line[256], oc, nc, bits, *lp, *sp;
  173.  
  174.     for( scanline = 0; scanline < 12; scanline++ ) {
  175.         charcol = not_empty = 0;
  176.         lp = line;
  177.         sp = string;
  178.         while( *sp && charcol < width - 7 ) {    /* don't overflow buffer */
  179.             nc = ((oc = *sp) - ' ') & 0x7f;
  180.             bits = lrgchars[nc][scanline];
  181.             if( bits )
  182.                 not_empty++;
  183.             scancol = 7;
  184.             while( scancol-- ) {
  185.                 *lp++ = bits & 0x40 ? oc : ' ';
  186.                 bits <<= 1;
  187.             }
  188.             *lp++ = ' ';
  189.             *lp++ = ' ';
  190.             sp++;
  191.             charcol += 9;
  192.         }
  193.         *lp++ = '\n';
  194.         *lp = 0;
  195.         if( strlen( line ) > width ) {        /* truncate line */
  196.             lp = line + width;
  197.             *lp++ = '\n';
  198.             *lp = 0;
  199.         }
  200.         if( not_empty )
  201.             output_string( io_stream, line );
  202.         else
  203.             output_char( io_stream, '\n' );
  204.         YIELD;
  205.     }
  206. }
  207.  
  208. /*
  209.  * large banner character definitions
  210.  */
  211.  
  212. #define c_______    0x00
  213. #define c______1    0x01
  214. #define c_____1_    0x02
  215. #define c____1__    0x04
  216. #define c____11_    0x06
  217. #define c___1___    0x08
  218. #define c___1__1    0x09
  219. #define c___1_1_    0x0A
  220. #define c___11__    0x0C
  221.  
  222. #define c__1____    0x10
  223. #define c__1__1_    0x12
  224. #define c__1_1__    0x14
  225. #define c__11___    0x18
  226. #define c__111__    0x1C
  227. #define c__111_1    0x1D
  228. #define c__1111_    0x1E
  229. #define c__11111    0x1F
  230.  
  231. #define c_1_____    0x20
  232. #define c_1____1    0x21
  233. #define c_1___1_    0x22
  234. #define c_1__1__    0x24
  235. #define c_1_1___    0x28
  236. #define c_1_1__1    0x29
  237. #define c_1_1_1_    0x2A
  238.  
  239. #define c_11____    0x30
  240. #define c_11_11_    0x36
  241. #define c_111___    0x38
  242. #define c_111__1    0x39
  243. #define c_111_1_    0x3A
  244. #define c_1111__    0x3C
  245. #define c_1111_1    0x3D
  246. #define c_11111_    0x3E
  247. #define c_111111    0x3F
  248.  
  249. #define c1______    0x40
  250. #define c1_____1    0x41
  251. #define c1____1_    0x42
  252. #define c1____11    0x43
  253. #define c1___1__    0x44
  254. #define c1___1_1    0x45
  255. #define c1___11_    0x46
  256. #define c1__1___    0x48
  257. #define c1__1__1    0x49
  258. #define c1__11_1    0x4D
  259. #define c1__1111    0x4F
  260.  
  261. #define c1_1____    0x50
  262. #define c1_1___1    0x51
  263. #define c1_1_1_1    0x55
  264. #define c1_1_11_    0x56
  265. #define c1_111__    0x5C
  266. #define c1_1111_    0x5E
  267.  
  268. #define c11____1    0x61
  269. #define c11___1_    0x62
  270. #define c11___11    0x63
  271. #define c11_1___    0x68
  272. #define c11_1__1    0x69
  273.  
  274. #define c111_11_    0x76
  275. #define c1111___    0x78
  276. #define c11111__    0x7C
  277. #define c111111_    0x7E
  278. #define c1111111    0x7F
  279.  
  280.  
  281. char lrgchars[][12] = {
  282.  
  283.     { c_______,
  284.       c_______,
  285.       c_______,
  286.       c_______,
  287.       c_______,
  288.       c_______,
  289.       c_______,
  290.       c_______,
  291.       c_______,
  292.       c_______,
  293.       c_______,
  294.       c_______ },
  295.  
  296.     { c__11___,
  297.       c__11___,
  298.       c__11___,
  299.       c__11___,
  300.       c__11___,
  301.       c_______,
  302.       c_______,
  303.       c__11___,
  304.       c__11___,
  305.       c_______,
  306.       c_______ },
  307.  
  308.     { c_1__1__,
  309.       c_1__1__,
  310.       c_______,
  311.       c_______,
  312.       c_______,
  313.       c_______,
  314.       c_______,
  315.       c_______,
  316.       c_______,
  317.       c_______,
  318.       c_______ },
  319.  
  320.     { c_______,
  321.       c__1_1__,
  322.       c__1_1__,
  323.       c1111111,
  324.       c__1_1__,
  325.       c1111111,
  326.       c__1_1__,
  327.       c__1_1__,
  328.       c_______,
  329.       c_______,
  330.       c_______ },
  331.  
  332.     { c___1___,
  333.       c_11111_,
  334.       c1__1__1,
  335.       c1__1___,
  336.       c_11111_,
  337.       c___1__1,
  338.       c1__1__1,
  339.       c_11111_,
  340.       c___1___,
  341.       c_______,
  342.       c_______ },
  343.  
  344.     { c_1_____,
  345.       c1_1___1,
  346.       c_1___1_,
  347.       c____1__,
  348.       c___1___,
  349.       c__1____,
  350.       c_1___1_,
  351.       c1___1_1,
  352.       c_____1_,
  353.       c_______,
  354.       c_______ },
  355.  
  356.     { c_11____,
  357.       c1__1___,
  358.       c1___1__,
  359.       c_1_1___,
  360.       c__1____,
  361.       c_1_1__1,
  362.       c1___11_,
  363.       c1___11_,
  364.       c_111__1,
  365.       c_______,
  366.       c_______ },
  367.  
  368.     { c___11__,
  369.       c___11__,
  370.       c___1___,
  371.       c__1____,
  372.       c_______,
  373.       c_______,
  374.       c_______,
  375.       c_______,
  376.       c_______,
  377.       c_______,
  378.       c_______ },
  379.  
  380.     { c____1__,
  381.       c___1___,
  382.       c__1____,
  383.       c__1____,
  384.       c__1____,
  385.       c__1____,
  386.       c__1____,
  387.       c___1___,
  388.       c____1__,
  389.       c_______,
  390.       c_______ },
  391.  
  392.     { c__1____,
  393.       c___1___,
  394.       c____1__,
  395.       c____1__,
  396.       c____1__,
  397.       c____1__,
  398.       c____1__,
  399.       c___1___,
  400.       c__1____,
  401.       c_______,
  402.       c_______ },
  403.  
  404.     { c_______,
  405.       c___1___,
  406.       c1__1__1,
  407.       c_1_1_1_,
  408.       c__111__,
  409.       c_1_1_1_,
  410.       c1__1__1,
  411.       c___1___,
  412.       c_______,
  413.       c_______,
  414.       c_______ },
  415.  
  416.     { c_______,
  417.       c___1___,
  418.       c___1___,
  419.       c___1___,
  420.       c1111111,
  421.       c___1___,
  422.       c___1___,
  423.       c___1___,
  424.       c_______,
  425.       c_______,
  426.       c_______ },
  427.  
  428.     { c_______,
  429.       c_______,
  430.       c_______,
  431.       c_______,
  432.       c__11___,
  433.       c__11___,
  434.       c__1____,
  435.       c_1_____,
  436.       c_______,
  437.       c_______,
  438.       c_______ },
  439.  
  440.     { c_______,
  441.       c_______,
  442.       c_______,
  443.       c_______,
  444.       c1111111,
  445.       c_______,
  446.       c_______,
  447.       c_______,
  448.       c_______,
  449.       c_______,
  450.       c_______ },
  451.  
  452.     { c_______,
  453.       c_______,
  454.       c_______,
  455.       c_______,
  456.       c_______,
  457.       c_______,
  458.       c_______,
  459.       c__11___,
  460.       c__11___,
  461.       c_______,
  462.       c_______ },
  463.  
  464.     { c_______,
  465.       c______1,
  466.       c_____1_,
  467.       c____1__,
  468.       c___1___,
  469.       c__1____,
  470.       c_1_____,
  471.       c1______,
  472.       c_______,
  473.       c_______,
  474.       c_______ },
  475.  
  476.     { c_11111_,
  477.       c1_____1,
  478.       c1____11,
  479.       c1___1_1,
  480.       c1__1__1,
  481.       c1_1___1,
  482.       c11____1,
  483.       c1_____1,
  484.       c_11111_,
  485.       c_______,
  486.       c_______ },
  487.  
  488.     { c___1___,
  489.       c__11___,
  490.       c_1_1___,
  491.       c___1___,
  492.       c___1___,
  493.       c___1___,
  494.       c___1___,
  495.       c___1___,
  496.       c_11111_,
  497.       c_______,
  498.       c_______ },
  499.  
  500.     { c_11111_,
  501.       c1_____1,
  502.       c______1,
  503.       c_____1_,
  504.       c__111__,
  505.       c_1_____,
  506.       c1______,
  507.       c1______,
  508.       c1111111,
  509.       c_______,
  510.       c_______ },
  511.  
  512.     { c_11111_,
  513.       c1_____1,
  514.       c______1,
  515.       c______1,
  516.       c__1111_,
  517.       c______1,
  518.       c______1,
  519.       c1_____1,
  520.       c_11111_,
  521.       c_______,
  522.       c_______ },
  523.  
  524.     { c_____1_,
  525.       c____11_,
  526.       c___1_1_,
  527.       c__1__1_,
  528.       c_1___1_,
  529.       c1____1_,
  530.       c1111111,
  531.       c_____1_,
  532.       c_____1_,
  533.       c_______,
  534.       c_______ },
  535.  
  536.     { c1111111,
  537.       c1______,
  538.       c1______,
  539.       c11111__,
  540.       c_____1_,
  541.       c______1,
  542.       c______1,
  543.       c1____1_,
  544.       c_1111__,
  545.       c_______,
  546.       c_______,
  547.       c_______ },
  548.  
  549.     { c__1111_,
  550.       c_1_____,
  551.       c1______,
  552.       c1______,
  553.       c1_1111_,
  554.       c11____1,
  555.       c1_____1,
  556.       c1_____1,
  557.       c_11111_,
  558.       c_______,
  559.       c_______,
  560.       c_______ },
  561.  
  562.     { c1111111,
  563.       c1_____1,
  564.       c_____1_,
  565.       c____1__,
  566.       c___1___,
  567.       c__1____,
  568.       c__1____,
  569.       c__1____,
  570.       c__1____,
  571.       c_______,
  572.       c_______,
  573.       c_______ },
  574.  
  575.     { c_11111_,
  576.       c1_____1,
  577.       c1_____1,
  578.       c1_____1,
  579.       c_11111_,
  580.       c1_____1,
  581.       c1_____1,
  582.       c1_____1,
  583.       c_11111_,
  584.       c_______,
  585.       c_______,
  586.       c_______ },
  587.  
  588.     { c_11111_,
  589.       c1_____1,
  590.       c1_____1,
  591.       c1_____1,
  592.       c_111111,
  593.       c______1,
  594.       c______1,
  595.       c1_____1,
  596.       c_1111__,
  597.       c_______,
  598.       c_______,
  599.       c_______ },
  600.  
  601.     { c_______,
  602.       c_______,
  603.       c_______,
  604.       c__11___,
  605.       c__11___,
  606.       c_______,
  607.       c_______,
  608.       c__11___,
  609.       c__11___,
  610.       c_______,
  611.       c_______,
  612.       c_______ },
  613.  
  614.     { c_______,
  615.       c_______,
  616.       c_______,
  617.       c__11___,
  618.       c__11___,
  619.       c_______,
  620.       c_______,
  621.       c__11___,
  622.       c__11___,
  623.       c__1____,
  624.       c_1_____,
  625.       c_______ },
  626.  
  627.     { c____1__,
  628.       c___1___,
  629.       c__1____,
  630.       c_1_____,
  631.       c1______,
  632.       c_1_____,
  633.       c__1____,
  634.       c___1___,
  635.       c____1__,
  636.       c_______,
  637.       c_______,
  638.       c_______ },
  639.  
  640.     { c_______,
  641.       c_______,
  642.       c_______,
  643.       c1111111,
  644.       c_______,
  645.       c1111111,
  646.       c_______,
  647.       c_______,
  648.       c_______,
  649.       c_______,
  650.       c_______,
  651.       c_______ },
  652.  
  653.     { c__1____,
  654.       c___1___,
  655.       c____1__,
  656.       c_____1_,
  657.       c______1,
  658.       c_____1_,
  659.       c____1__,
  660.       c___1___,
  661.       c__1____,
  662.       c_______,
  663.       c_______,
  664.       c_______ },
  665.  
  666.     { c__1111_,
  667.       c_1____1,
  668.       c_1____1,
  669.       c______1,
  670.       c____11_,
  671.       c___1___,
  672.       c___1___,
  673.       c_______,
  674.       c___1___,
  675.       c_______,
  676.       c_______,
  677.       c_______ },
  678.  
  679.     { c__1111_,
  680.       c_1____1,
  681.       c1__11_1,
  682.       c1_1_1_1,
  683.       c1_1_1_1,
  684.       c1_1111_,
  685.       c1______,
  686.       c_1____1,
  687.       c__1111_,
  688.       c_______,
  689.       c_______,
  690.       c_______ },
  691.  
  692.     { c__111__,
  693.       c_1___1_,
  694.       c1_____1,
  695.       c1_____1,
  696.       c1111111,
  697.       c1_____1,
  698.       c1_____1,
  699.       c1_____1,
  700.       c1_____1,
  701.       c_______,
  702.       c_______,
  703.       c_______ },
  704.  
  705.     { c111111_,
  706.       c_1____1,
  707.       c_1____1,
  708.       c_1____1,
  709.       c_11111_,
  710.       c_1____1,
  711.       c_1____1,
  712.       c_1____1,
  713.       c111111_,
  714.       c_______,
  715.       c_______,
  716.       c_______ },
  717.  
  718.     { c__1111_,
  719.       c_1____1,
  720.       c1______,
  721.       c1______,
  722.       c1______,
  723.       c1______,
  724.       c1______,
  725.       c_1____1,
  726.       c__1111_,
  727.       c_______,
  728.       c_______,
  729.       c_______ },
  730.  
  731.     { c11111__,
  732.       c_1___1_,
  733.       c_1____1,
  734.       c_1____1,
  735.       c_1____1,
  736.       c_1____1,
  737.       c_1____1,
  738.       c_1___1_,
  739.       c11111__,
  740.       c_______,
  741.       c_______,
  742.       c_______ },
  743.  
  744.     { c1111111,
  745.       c1______,
  746.       c1______,
  747.       c1______,
  748.       c111111_,
  749.       c1______,
  750.       c1______,
  751.       c1______,
  752.       c1111111,
  753.       c_______,
  754.       c_______,
  755.       c_______ },
  756.  
  757.     { c1111111,
  758.       c1______,
  759.       c1______,
  760.       c1______,
  761.       c111111_,
  762.       c1______,
  763.       c1______,
  764.       c1______,
  765.       c1______,
  766.       c_______,
  767.       c_______,
  768.       c_______ },
  769.  
  770.     { c__1111_,
  771.       c_1____1,
  772.       c1______,
  773.       c1______,
  774.       c1______,
  775.       c1__1111,
  776.       c1_____1,
  777.       c_1____1,
  778.       c__1111_,
  779.       c_______,
  780.       c_______,
  781.       c_______ },
  782.  
  783.     { c1_____1,
  784.       c1_____1,
  785.       c1_____1,
  786.       c1_____1,
  787.       c1111111,
  788.       c1_____1,
  789.       c1_____1,
  790.       c1_____1,
  791.       c1_____1,
  792.       c_______,
  793.       c_______,
  794.       c_______ },
  795.  
  796.     { c_11111_,
  797.       c___1___,
  798.       c___1___,
  799.       c___1___,
  800.       c___1___,
  801.       c___1___,
  802.       c___1___,
  803.       c___1___,
  804.       c_11111_,
  805.       c_______,
  806.       c_______,
  807.       c_______ },
  808.  
  809.     { c__11111,
  810.       c____1__,
  811.       c____1__,
  812.       c____1__,
  813.       c____1__,
  814.       c____1__,
  815.       c____1__,
  816.       c1___1__,
  817.       c_111___,
  818.       c_______,
  819.       c_______,
  820.       c_______ },
  821.  
  822.     { c1_____1,
  823.       c1____1_,
  824.       c1___1__,
  825.       c1__1___,
  826.       c1_1____,
  827.       c11_1___,
  828.       c1___1__,
  829.       c1____1_,
  830.       c1_____1,
  831.       c_______,
  832.       c_______,
  833.       c_______ },
  834.  
  835.     { c1______,
  836.       c1______,
  837.       c1______,
  838.       c1______,
  839.       c1______,
  840.       c1______,
  841.       c1______,
  842.       c1______,
  843.       c1111111,
  844.       c_______,
  845.       c_______,
  846.       c_______ },
  847.  
  848.     { c1_____1,
  849.       c11___11,
  850.       c1_1_1_1,
  851.       c1__1__1,
  852.       c1_____1,
  853.       c1_____1,
  854.       c1_____1,
  855.       c1_____1,
  856.       c1_____1,
  857.       c_______,
  858.       c_______,
  859.       c_______ },
  860.  
  861.     { c1_____1,
  862.       c11____1,
  863.       c1_1___1,
  864.       c1__1__1,
  865.       c1___1_1,
  866.       c1____11,
  867.       c1_____1,
  868.       c1_____1,
  869.       c1_____1,
  870.       c_______,
  871.       c_______,
  872.       c_______ },
  873.  
  874.     { c__111__,
  875.       c_1___1_,
  876.       c1_____1,
  877.       c1_____1,
  878.       c1_____1,
  879.       c1_____1,
  880.       c1_____1,
  881.       c_1___1_,
  882.       c__111__,
  883.       c_______,
  884.       c_______,
  885.       c_______ },
  886.  
  887.     { c111111_,
  888.       c1_____1,
  889.       c1_____1,
  890.       c1_____1,
  891.       c111111_,
  892.       c1______,
  893.       c1______,
  894.       c1______,
  895.       c1______,
  896.       c_______,
  897.       c_______,
  898.       c_______ },
  899.  
  900.     { c__111__,
  901.       c_1___1_,
  902.       c1_____1,
  903.       c1_____1,
  904.       c1_____1,
  905.       c1__1__1,
  906.       c1___1_1,
  907.       c_1___1_,
  908.       c__111_1,
  909.       c_______,
  910.       c_______,
  911.       c_______ },
  912.  
  913.     { c111111_,
  914.       c1_____1,
  915.       c1_____1,
  916.       c1_____1,
  917.       c111111_,
  918.       c1__1___,
  919.       c1___1__,
  920.       c1____1_,
  921.       c1_____1,
  922.       c_______,
  923.       c_______,
  924.       c_______ },
  925.  
  926.     { c_11111_,
  927.       c1_____1,
  928.       c1______,
  929.       c1______,
  930.       c_11111_,
  931.       c______1,
  932.       c______1,
  933.       c1_____1,
  934.       c_11111_,
  935.       c_______,
  936.       c_______,
  937.       c_______ },
  938.  
  939.     { c1111111,
  940.       c___1___,
  941.       c___1___,
  942.       c___1___,
  943.       c___1___,
  944.       c___1___,
  945.       c___1___,
  946.       c___1___,
  947.       c___1___,
  948.       c_______,
  949.       c_______,
  950.       c_______ },
  951.  
  952.     { c1_____1,
  953.       c1_____1,
  954.       c1_____1,
  955.       c1_____1,
  956.       c1_____1,
  957.       c1_____1,
  958.       c1_____1,
  959.       c1_____1,
  960.       c_11111_,
  961.       c_______,
  962.       c_______,
  963.       c_______ },
  964.  
  965.     { c1_____1,
  966.       c1_____1,
  967.       c1_____1,
  968.       c_1___1_,
  969.       c_1___1_,
  970.       c__1_1__,
  971.       c__1_1__,
  972.       c___1___,
  973.       c___1___,
  974.       c_______,
  975.       c_______,
  976.       c_______ },
  977.  
  978.     { c1_____1,
  979.       c1_____1,
  980.       c1_____1,
  981.       c1_____1,
  982.       c1__1__1,
  983.       c1__1__1,
  984.       c1_1_1_1,
  985.       c11___11,
  986.       c1_____1,
  987.       c_______,
  988.       c_______,
  989.       c_______ },
  990.  
  991.     { c1_____1,
  992.       c1_____1,
  993.       c_1___1_,
  994.       c__1_1__,
  995.       c___1___,
  996.       c__1_1__,
  997.       c_1___1_,
  998.       c1_____1,
  999.       c1_____1,
  1000.       c_______,
  1001.       c_______,
  1002.       c_______ },
  1003.  
  1004.     { c1_____1,
  1005.       c1_____1,
  1006.       c_1___1_,
  1007.       c__1_1__,
  1008.       c___1___,
  1009.       c___1___,
  1010.       c___1___,
  1011.       c___1___,
  1012.       c___1___,
  1013.       c_______,
  1014.       c_______,
  1015.       c_______ },
  1016.  
  1017.     { c1111111,
  1018.       c______1,
  1019.       c_____1_,
  1020.       c____1__,
  1021.       c___1___,
  1022.       c__1____,
  1023.       c_1_____,
  1024.       c1______,
  1025.       c1111111,
  1026.       c_______,
  1027.       c_______,
  1028.       c_______ },
  1029.  
  1030.     { c_1111__,
  1031.       c_1_____,
  1032.       c_1_____,
  1033.       c_1_____,
  1034.       c_1_____,
  1035.       c_1_____,
  1036.       c_1_____,
  1037.       c_1_____,
  1038.       c_1111__,
  1039.       c_______,
  1040.       c_______,
  1041.       c_______ },
  1042.  
  1043.     { c_______,
  1044.       c1______,
  1045.       c_1_____,
  1046.       c__1____,
  1047.       c___1___,
  1048.       c____1__,
  1049.       c_____1_,
  1050.       c______1,
  1051.       c_______,
  1052.       c_______,
  1053.       c_______,
  1054.       c_______ },
  1055.  
  1056.     { c__1111_,
  1057.       c_____1_,
  1058.       c_____1_,
  1059.       c_____1_,
  1060.       c_____1_,
  1061.       c_____1_,
  1062.       c_____1_,
  1063.       c_____1_,
  1064.       c__1111_,
  1065.       c_______,
  1066.       c_______,
  1067.       c_______ },
  1068.  
  1069.     { c___1___,
  1070.       c__1_1__,
  1071.       c_1___1_,
  1072.       c1_____1,
  1073.       c_______,
  1074.       c_______,
  1075.       c_______,
  1076.       c_______,
  1077.       c_______,
  1078.       c_______,
  1079.       c_______,
  1080.       c_______ },
  1081.  
  1082.     { c_______,
  1083.       c_______,
  1084.       c_______,
  1085.       c_______,
  1086.       c_______,
  1087.       c_______,
  1088.       c_______,
  1089.       c_______,
  1090.       c_______,
  1091.       c_______,
  1092.       c1111111,
  1093.       c_______ },
  1094.  
  1095.     { c__11___,
  1096.       c__11___,
  1097.       c___1___,
  1098.       c____1__,
  1099.       c_______,
  1100.       c_______,
  1101.       c_______,
  1102.       c_______,
  1103.       c_______,
  1104.       c_______,
  1105.       c_______,
  1106.       c_______ },
  1107.  
  1108.     { c_______,
  1109.       c_______,
  1110.       c_______,
  1111.       c_1111__,
  1112.       c_____1_,
  1113.       c_11111_,
  1114.       c1_____1,
  1115.       c1____11,
  1116.       c_1111_1,
  1117.       c_______,
  1118.       c_______,
  1119.       c_______ },
  1120.  
  1121.     { c1______,
  1122.       c1______,
  1123.       c1______,
  1124.       c1_111__,
  1125.       c11___1_,
  1126.       c1_____1,
  1127.       c1_____1,
  1128.       c11___1_,
  1129.       c1_111__,
  1130.       c_______,
  1131.       c_______,
  1132.       c_______ },
  1133.  
  1134.     { c_______,
  1135.       c_______,
  1136.       c_______,
  1137.       c_1111__,
  1138.       c1____1_,
  1139.       c1______,
  1140.       c1______,
  1141.       c1____1_,
  1142.       c_1111__,
  1143.       c_______,
  1144.       c_______,
  1145.       c_______ },
  1146.  
  1147.     { c_____1_,
  1148.       c_____1_,
  1149.       c_____1_,
  1150.       c_111_1_,
  1151.       c1___11_,
  1152.       c1____1_,
  1153.       c1____1_,
  1154.       c1___11_,
  1155.       c_111_1_,
  1156.       c_______,
  1157.       c_______,
  1158.       c_______ },
  1159.  
  1160.     { c_______,
  1161.       c_______,
  1162.       c_______,
  1163.       c_1111__,
  1164.       c1____1_,
  1165.       c111111_,
  1166.       c1______,
  1167.       c1____1_,
  1168.       c_1111__,
  1169.       c_______,
  1170.       c_______,
  1171.       c_______ },
  1172.  
  1173.     { c___11__,
  1174.       c__1__1_,
  1175.       c__1____,
  1176.       c__1____,
  1177.       c11111__,
  1178.       c__1____,
  1179.       c__1____,
  1180.       c__1____,
  1181.       c__1____,
  1182.       c_______,
  1183.       c_______,
  1184.       c_______ },
  1185.  
  1186.     { c_______,
  1187.       c_______,
  1188.       c_______,
  1189.       c_111_1_,
  1190.       c1___11_,
  1191.       c1____1_,
  1192.       c1____1_,
  1193.       c1___11_,
  1194.       c_111_1_,
  1195.       c_____1_,
  1196.       c1____1_,
  1197.       c_1111__ },
  1198.  
  1199.     { c1______,
  1200.       c1______,
  1201.       c1______,
  1202.       c1_111__,
  1203.       c11___1_,
  1204.       c1____1_,
  1205.       c1____1_,
  1206.       c1____1_,
  1207.       c1____1_,
  1208.       c_______,
  1209.       c_______,
  1210.       c_______ },
  1211.  
  1212.     { c_______,
  1213.       c___1___,
  1214.       c_______,
  1215.       c__11___,
  1216.       c___1___,
  1217.       c___1___,
  1218.       c___1___,
  1219.       c___1___,
  1220.       c__111__,
  1221.       c_______,
  1222.       c_______,
  1223.       c_______ },
  1224.  
  1225.     { c_______,
  1226.       c_______,
  1227.       c_______,
  1228.       c____11_,
  1229.       c_____1_,
  1230.       c_____1_,
  1231.       c_____1_,
  1232.       c_____1_,
  1233.       c_____1_,
  1234.       c_____1_,
  1235.       c_1___1_,
  1236.       c__111__ },
  1237.  
  1238.     { c1______,
  1239.       c1______,
  1240.       c1______,
  1241.       c1___1__,
  1242.       c1__1___,
  1243.       c1_1____,
  1244.       c11_1___,
  1245.       c1___1__,
  1246.       c1____1_,
  1247.       c_______,
  1248.       c_______,
  1249.       c_______ },
  1250.  
  1251.     { c__11___,
  1252.       c___1___,
  1253.       c___1___,
  1254.       c___1___,
  1255.       c___1___,
  1256.       c___1___,
  1257.       c___1___,
  1258.       c___1___,
  1259.       c__111__,
  1260.       c_______,
  1261.       c_______,
  1262.       c_______ },
  1263.  
  1264.     { c_______,
  1265.       c_______,
  1266.       c_______,
  1267.       c1_1_11_,
  1268.       c11_1__1,
  1269.       c1__1__1,
  1270.       c1__1__1,
  1271.       c1__1__1,
  1272.       c1__1__1,
  1273.       c_______,
  1274.       c_______,
  1275.       c_______ },
  1276.  
  1277.     { c_______,
  1278.       c_______,
  1279.       c_______,
  1280.       c1_111__,
  1281.       c11___1_,
  1282.       c1____1_,
  1283.       c1____1_,
  1284.       c1____1_,
  1285.       c1____1_,
  1286.       c_______,
  1287.       c_______,
  1288.       c_______ },
  1289.  
  1290.     { c_______,
  1291.       c_______,
  1292.       c_______,
  1293.       c_1111__,
  1294.       c1____1_,
  1295.       c1____1_,
  1296.       c1____1_,
  1297.       c1____1_,
  1298.       c_1111__,
  1299.       c_______,
  1300.       c_______,
  1301.       c_______ },
  1302.  
  1303.     { c_______,
  1304.       c_______,
  1305.       c_______,
  1306.       c1_111__,
  1307.       c11___1_,
  1308.       c1____1_,
  1309.       c1____1_,
  1310.       c11___1_,
  1311.       c1_111__,
  1312.       c1______,
  1313.       c1______,
  1314.       c1______ },
  1315.  
  1316.     { c_______,
  1317.       c_______,
  1318.       c_______,
  1319.       c_111_1_,
  1320.       c1___11_,
  1321.       c1____1_,
  1322.       c1____1_,
  1323.       c1___11_,
  1324.       c_111_1_,
  1325.       c_____1_,
  1326.       c_____1_,
  1327.       c_____1_ },
  1328.  
  1329.     { c_______,
  1330.       c_______,
  1331.       c_______,
  1332.       c1_111__,
  1333.       c11___1_,
  1334.       c1______,
  1335.       c1______,
  1336.       c1______,
  1337.       c1______,
  1338.       c_______,
  1339.       c_______,
  1340.       c_______ },
  1341.  
  1342.     { c_______,
  1343.       c_______,
  1344.       c_______,
  1345.       c_1111__,
  1346.       c1____1_,
  1347.       c_11____,
  1348.       c___11__,
  1349.       c1____1_,
  1350.       c_1111__,
  1351.       c_______,
  1352.       c_______,
  1353.       c_______ },
  1354.  
  1355.     { c_______,
  1356.       c__1____,
  1357.       c__1____,
  1358.       c11111__,
  1359.       c__1____,
  1360.       c__1____,
  1361.       c__1____,
  1362.       c__1__1_,
  1363.       c___11__,
  1364.       c_______,
  1365.       c_______,
  1366.       c_______ },
  1367.  
  1368.     { c_______,
  1369.       c_______,
  1370.       c_______,
  1371.       c1____1_,
  1372.       c1____1_,
  1373.       c1____1_,
  1374.       c1____1_,
  1375.       c1___11_,
  1376.       c_111_1_,
  1377.       c_______,
  1378.       c_______,
  1379.       c_______ },
  1380.  
  1381.     { c_______,
  1382.       c_______,
  1383.       c_______,
  1384.       c1_____1,
  1385.       c1_____1,
  1386.       c1_____1,
  1387.       c_1___1_,
  1388.       c__1_1__,
  1389.       c___1___,
  1390.       c_______,
  1391.       c_______,
  1392.       c_______ },
  1393.  
  1394.     { c_______,
  1395.       c_______,
  1396.       c_______,
  1397.       c1_____1,
  1398.       c1__1__1,
  1399.       c1__1__1,
  1400.       c1__1__1,
  1401.       c1__1__1,
  1402.       c_11_11_,
  1403.       c_______,
  1404.       c_______,
  1405.       c_______ },
  1406.  
  1407.     { c_______,
  1408.       c_______,
  1409.       c_______,
  1410.       c1____1_,
  1411.       c_1__1__,
  1412.       c__11___,
  1413.       c__11___,
  1414.       c_1__1__,
  1415.       c1____1_,
  1416.       c_______,
  1417.       c_______,
  1418.       c_______ },
  1419.  
  1420.     { c_______,
  1421.       c_______,
  1422.       c_______,
  1423.       c1____1_,
  1424.       c1____1_,
  1425.       c1____1_,
  1426.       c1____1_,
  1427.       c1___11_,
  1428.       c_111_1_,
  1429.       c_____1_,
  1430.       c1____1_,
  1431.       c_1111__ },
  1432.  
  1433.     { c_______,
  1434.       c_______,
  1435.       c_______,
  1436.       c111111_,
  1437.       c____1__,
  1438.       c___1___,
  1439.       c__1____,
  1440.       c_1_____,
  1441.       c111111_,
  1442.       c_______,
  1443.       c_______,
  1444.       c_______ },
  1445.  
  1446.     { c___11__,
  1447.       c__1____,
  1448.       c__1____,
  1449.       c__1____,
  1450.       c_1_____,
  1451.       c__1____,
  1452.       c__1____,
  1453.       c__1____,
  1454.       c___11__,
  1455.       c_______,
  1456.       c_______,
  1457.       c_______ },
  1458.  
  1459.     { c___1___,
  1460.       c___1___,
  1461.       c___1___,
  1462.       c___1___,
  1463.       c___1___,
  1464.       c___1___,
  1465.       c___1___,
  1466.       c___1___,
  1467.       c___1___,
  1468.       c_______,
  1469.       c_______,
  1470.       c_______ },
  1471.  
  1472.     { c__11___,
  1473.       c____1__,
  1474.       c____1__,
  1475.       c____1__,
  1476.       c_____1_,
  1477.       c____1__,
  1478.       c____1__,
  1479.       c____1__,
  1480.       c__11___,
  1481.       c_______,
  1482.       c_______,
  1483.       c_______ },
  1484.  
  1485.     { c_11____,
  1486.       c1__1__1,
  1487.       c____11_,
  1488.       c_______,
  1489.       c_______,
  1490.       c_______,
  1491.       c_______,
  1492.       c_______,
  1493.       c_______,
  1494.       c_______,
  1495.       c_______,
  1496.       c_______ },
  1497.  
  1498.     { c_1__1__,
  1499.       c1__1__1,
  1500.       c__1__1_,
  1501.       c_1__1__,
  1502.       c1__1__1,
  1503.       c__1__1_,
  1504.       c_1__1__,
  1505.       c1__1__1,
  1506.       c__1__1_,
  1507.       c_______,
  1508.       c_______,
  1509.       c_______ },
  1510.  
  1511. };
  1512.  
  1513.